In most computing systems a CPU executes multiple applications, requiring different applications to share access to the system's physical resources. If the availability of the resources exceeds the demands of the requesting applications, allocating the system's resources may be as simple as providing access to the resource when access is requested by an application. In practice however, system resources are generally not provisioned to the extent necessary for unrestrained access by all requesting applications. Among the functions of most operating systems is the allocation of system resources among requesting applications that are executing on the CPU. For example, many operating systems include a CPU scheduler to allocate processing time slices or windows to applications currently being executed. Resource schedulers are also used to manage requests from applications for physical resources. For instance, most operating systems include one or more input/output (I/O) schedulers to manage the submission of I/O requests to the I/O devices such as disk drives.
Various objectives are often considered in the design of resource schedulers. For example, I/O schedulers may be designed to provide fairness among different requesting applications. Some I/O schedulers utilize different I/O queues for the I/O requests of different applications and a round-robin selection of requests from each queue to ensure each application is serviced. I/O schedulers may also be designed with the objective of maximizing disk throughput and/or minimize I/O latency for the storage system. Anticipatory schedulers generally attempt to optimize disk throughput and quality of service (QoS) guarantees. Deadline schedulers generally attempt to minimize I/O latencies. To address disk throughput, first-in first-out (FIFO) queues are often used whereby the first request received is the first submitted by the scheduler to the storage system. Schedulers may also estimate disk seek times for I/O requests (e.g., using disk spatial locality) to improve utilization of the disk. Heuristics are used by some schedulers to wait for additional requests from an application after processing a first request in anticipation that another request from the same process may be received. Such schemes can improve disk utilization where the application I/O requests are for data with disk spatial locality. QoS guarantees can be used in scheduling requests such that certain applications or domains are guaranteed some minimum level of resource availability, such as a minimum I/O throughput or bandwidth.